fix(langs): declare all language packages as explicit dependencies#760
Merged
jaywcjlove merged 2 commits intouiwjs:masterfrom Mar 2, 2026
Merged
Conversation
The generated src/index.ts imports from 20+ @codemirror/lang-* and @codemirror/legacy-modes packages that were never declared in package.json. They only worked as phantom dependencies hoisted from @codemirror/language-data, which breaks under pnpm strict mode. - Enhance gen-langs-map.cjs to auto-sync package.json dependencies after generating the TypeScript file - Move @codemirror/language-data to devDependencies (only needed as input for the gen script, not at runtime) - Remove @codemirror/language-data from peerDependencies Fixes uiwjs#759 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
github-actions bot
pushed a commit
that referenced
this pull request
Mar 2, 2026
…ncies (#760) * fix(langs): declare all language packages as explicit dependencies The generated src/index.ts imports from 20+ @codemirror/lang-* and @codemirror/legacy-modes packages that were never declared in package.json. They only worked as phantom dependencies hoisted from @codemirror/language-data, which breaks under pnpm strict mode. - Enhance gen-langs-map.cjs to auto-sync package.json dependencies after generating the TypeScript file - Move @codemirror/language-data to devDependencies (only needed as input for the gen script, not at runtime) - Remove @codemirror/language-data from peerDependencies Fixes #759 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore(langs): pin @codemirror/language-data to 6.5.2 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> dddf539
jaywcjlove
added a commit
that referenced
this pull request
Mar 2, 2026
6 tasks
GeorgeDong32
pushed a commit
to CherryHQ/cherry-studio
that referenced
this pull request
Mar 3, 2026
### What this PR does Before this PR: `@uiw/codemirror-extensions-langs`, `@uiw/codemirror-themes-all`, and `@uiw/react-codemirror` were pinned at version 4.25.1 to work around a phantom dependency issue. After this PR: - All three `@uiw/codemirror-*` packages are upgraded to 4.25.7 with exact version pinning (no `^` prefix). The phantom dependency issue has been resolved upstream, making this upgrade safe. - Added `@codemirror/state` to `pnpm.overrides` to resolve version duplication, and updated the overrides for `@codemirror/view`, `@codemirror/language`, and `@codemirror/lint` to their latest versions. Fixes #12829 ### Why we need it and why it was done in this way The following tradeoffs were made: - Exact version pinning (removing `^`) is used to prevent unexpected automatic upgrades that could reintroduce dependency issues. - `pnpm.overrides` is used to enforce a single version of each `@codemirror/*` core package across the entire dependency tree. Without this, multiple versions coexist due to different sub-dependencies resolving independently, which causes TypeScript errors because CodeMirror uses private class properties for nominal typing. - After the update, `@codemirror/state` has multiple dependency versions (6.5.3 and 6.5.4 coexisting), which declare different types for the same type name, causing TypeScript errors. Therefore, an override was added for this dependency. The following alternatives were considered: - Using `^4.25.7` (range specifier) was considered but rejected in favor of exact pinning for more predictable dependency resolution. - Considered removing the override, but dependency analysis is difficult to handle because the previous override has already left a fixed version in the lock file. Deleting the lock file and regenerating it would cause extensive changes. Links to places where the discussion took place: - #12829 — original issue that pinned versions to 4.25.1 - #13133 — also referenced the phantom dependency problem - uiwjs/react-codemirror#760 ### Breaking changes None. ### Special notes for your reviewer The `@codemirror/*` override versions are updated as follows: | Package | Old | New | |---|---|---| | `@codemirror/state` | _(none)_ | 6.5.4 | | `@codemirror/view` | 6.38.1 | 6.39.16 | | `@codemirror/language` | 6.11.3 | 6.12.2 | | `@codemirror/lint` | 6.8.5 | 6.9.5 | ### Checklist - [x] PR: The PR description is expressive enough and will help future contributors - [x] Code: [Write code that humans can understand](https://en.wikiquote.org/wiki/Martin_Fowler#code-for-humans) and [Keep it simple](https://en.wikipedia.org/wiki/KISS_principle) - [x] Refactor: You have [left the code cleaner than you found it (Boy Scout Rule)](https://learning.oreilly.com/library/view/97-things-every/9780596809515/ch08.html) - [x] Upgrade: Impact of this change on upgrade flows was considered and addressed if required - [ ] Documentation: A [user-guide update](https://docs.cherry-ai.com) was considered and is present (link) or not required. Check this only when the PR introduces or changes a user-facing feature or behavior. - [ ] Self-review: I have reviewed my own code (e.g., via [`/gh-pr-review`](/.claude/skills/gh-pr-review/SKILL.md), `gh pr diff`, or GitHub UI) before requesting review from others ### Release note ```release-note NONE ```
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
package.jsondependencies after generatingsrc/index.ts, ensuring every imported package is explicitly declared@codemirror/language-datafromdependenciestodevDependenciesand pinned to6.5.2(only used as gen script input, not at runtime)@codemirror/language-datafrompeerDependenciesProblem
The generated
src/index.tsimports from 20+@codemirror/lang-*and@codemirror/legacy-modespackages that were never declared inpackage.json. They only worked as phantom dependencies hoisted from@codemirror/language-data, which breaks under pnpm strict mode.Fixes #754
Fixes #759
Note on
src/index.tsdiffThe regenerated
src/index.tsincludes minor content changes (e.g.jinjaupgraded from legacy mode to@codemirror/lang-jinja, newxq/xqm/xqyextensions added) because the repo has no lockfile —npm installresolved@codemirror/language-data@6.5.2while the previously committed output was generated from6.5.1. This version has now been pinned to6.5.2indevDependenciesto prevent future drift.Test plan
npm run geninextensions/langs/and verifypackage.jsondependencies are auto-updatedsrc/index.tshave corresponding entries inpackage.jsonpnpm install --strict-peer-dependenciesto confirm no phantom dependency issues🤖 Generated with Claude Code